package com.chixing.service.impl;

import com.chixing.mapper.StoreCarMapper;
import com.chixing.mapper.StoreMapper;
import com.chixing.pojo.Store;
import com.chixing.pojo.StoreCar;
import com.chixing.pojo.StoreCarExample;
import com.chixing.service.StoreCarService;
import com.chixing.util.ServerResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.concurrent.TimeUnit;

/**
 * @author Wesley
 * @version 1.0
 * @date 2021/10/26 11:12
 */
@Service
public class StoreCarServiceImpl implements StoreCarService {
    @Autowired
    private StoreCarMapper storeCarMapper;
    @Autowired
    private RedisTemplate redisTemplate;
    @Override
    public ServerResponse addCarSaleCount(StoreCar storeCar) {
        storeCar.setCarSaleCount(storeCar.getCarSaleCount() + 1);
        int update = storeCarMapper.updateByPrimaryKey(storeCar);
        if(update > 0)
            return ServerResponse.updateSuccess(storeCar);
        return ServerResponse.updateFail(null);
    }

    @Override
    public ServerResponse descCarReserve(StoreCar storeCar) {
        storeCar.setCarReserve(storeCar.getCarReserve() - 1);
        int update = storeCarMapper.updateByPrimaryKey(storeCar);
        if(update > 0)
            return ServerResponse.updateSuccess(storeCar);
        return ServerResponse.updateFail(null);
    }

    @Override
    public StoreCar getByConditions(Integer storeId, Integer carId) {
        StoreCarExample storeCarExample = new StoreCarExample();
        StoreCarExample.Criteria criteria = storeCarExample.createCriteria();
        criteria.andStoreIdEqualTo(storeId);
        criteria.andCarIdEqualTo(carId);
        StoreCar storeCar = storeCarMapper.selectByExample(storeCarExample).get(0);
        return storeCar;
    }

    @Override
    public ServerResponse getStoreCarByStoreIdAndCarId(Integer storeId, Integer carId) {
        StoreCarExample storeCarExample = new StoreCarExample();
        storeCarExample.createCriteria().andStoreIdEqualTo(storeId).andCarIdEqualTo(carId);
        String redisStoreCarKey = storeId+"-storeCar-"+carId;
        StoreCar storeCar = null;
        if(redisTemplate.hasKey(redisStoreCarKey)){
            storeCar = (StoreCar)redisTemplate.opsForValue().get(redisStoreCarKey);
        }else {
            List<StoreCar> storeCarList = storeCarMapper.selectByExample(storeCarExample);
            if (storeCarList.size() > 0) {
                storeCar = storeCarList.get(0);
                redisTemplate.opsForValue().set(redisStoreCarKey,storeCar,10, TimeUnit.MINUTES);
            }
        }
        if(storeCar != null)
            return ServerResponse.getSuccess(storeCar);
        return ServerResponse.getFail(null);
    }

    @Override
    public ServerResponse updateStoreCar(StoreCar storeCar) {
        int update = storeCarMapper.updateByPrimaryKey(storeCar);
        if(update > 0)
            return ServerResponse.updateSuccess(update);
        return ServerResponse.updateFail(null);
    }
}
